/*
 * Copyright 2007 Daniel Spiewak
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at
 * 
 *	    http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.java.ao.schema;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * TODO	convert this to use {@link LinkedHashMap}
 * 
 * @author Daniel Spiewak
 */
class OrderedProperties extends HashMap<String, String> implements Iterable<String> {
	private static final long serialVersionUID = 1L;
	private List<String> keyList;
	
	public OrderedProperties() {
		keyList = new LinkedList<String>();
	}

	public void load(InputStream inStream) throws IOException {
		load(new InputStreamReader(inStream));
	}

	public void load(Reader reader) throws IOException {
		 BufferedReader bufferedReader = new BufferedReader(reader);
		 Pattern pattern = Pattern.compile("([^#].+)=([^#\\r\\n]+)");
		 
		 String line = null;
		 while ((line = bufferedReader.readLine()) != null) {
			 Matcher matcher = pattern.matcher(line);
			 if (matcher.find()) {
				 keyList.add(matcher.group(1).trim());
				 put(matcher.group(1).trim(), matcher.group(2).trim());
			 }
		 }
	}

	public Iterator<String> iterator() {
		return keyList.iterator();
	}
}
